package com.liuf.di.repository;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;

import java.util.List;
import java.util.Map;

/**
 * @program: spring-cloud-liuf-master
 * @description: 元数据数据操作
 * @author: Mr.Liu
 * @create: 2018-09-04 16:14
 * @码云： https://gitee.com/www.jiandan.com
 **/
public interface IDatabaseRepository {

    /**
     * 查询元数据库资源列表
     * @param params    参数MAP
     * @return  List
     */
    @Select(value = "SELECT t.*,d.CODE,c.CODE FROM r_database t JOIN r_database_contype c ON t.ID_DATABASE_CONTYPE = c.ID_DATABASE_CONTYPE JOIN r_database_type d ON t.ID_DATABASE_TYPE=d.ID_DATABASE_TYPE WHERE 1=1")
    List<Map<String, Object>> getDatabases(Map<String,Object> params);

    /**
     * 删除元数据库信息
     * @param ID_DATABASE   主键
     * @return  int
     */
    @Delete(value = "delete r_database t where t.ID_DATABASE = #{ID_DATABASE}")
    Integer delete(int ID_DATABASE);

    /**
     * 查询元数据库信息
     * @param ID_DATABASE   主键
     * @return  map
     */
    @Select(value = "SELECT t.*,d.CODE,c.CODE FROM r_database t JOIN r_database_contype c ON t.ID_DATABASE_CONTYPE = c.ID_DATABASE_CONTYPE JOIN r_database_type d ON t.ID_DATABASE_TYPE=d.ID_DATABASE_TYPE WHERE t.ID_DATABASE = #{ID_DATABASE}")
    Map<String,Object> getDatabase(long ID_DATABASE);

    /**
     * 查询用户定义的数据库的详细信息
     * @param params 参数Map
     * @return  list
     */
    @Select(value = "select * from r_database_attribute t ")
    List<Map<String,Object>> getDatabaseAttribute(Map<String,Object> params);

    /**
     * 查询数据库的连接方式
     *      有NATIVE，ODBC，OCI，Plugin和JNDI五种
     * @param params    查询参数
     * @return  list
     */
    @Select(value = "select * from r_database_contype t ")
    List<Map<String,Object>> getDatabaseContype(Map<String,Object> params);

    /**
     * 查询kettle支持的所有的数据库类型列表
     * @param params    参数Map
     * @return  List
     */
    @Select(value = "select * from r_database_type t ")
    List<Map<String,Object>> getDatabaseType(Map<String,Object> params);
    /**
     * 验证kettle元数据数据库是否存在（true：存在 false：不存在）
     * @param name  元数据数据名称
     * @return  boolean
     */
    @Select(value = "SELECT CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END AS BIT FROM r_database t WHERE t.name = #{name}")
    Boolean booleanDataBase(String name);

}
